#include <iostream>
#include <future>
#include <thread>
using namespace std;
int main()
{
    // 1、创建一个传递值的promise对象
    std::promise<int> prom;
    // 2、获取promise关联的future对象
    std::future<int> fut = prom.get_future();

    // 在另一个线程中设置结果
    std::thread t([&]()
                  { 
                    std::this_thread::sleep_for(std::chrono::seconds(2));
                    prom.set_value(10); });
    cout << "fut's state is " << fut.valid() << endl;
    // 等待结果：future::get() 阻塞的是 调用 get 的那个线程
    std::cout << "Future value: " << fut.get() << std::endl;
    // fut.get() 只保证 数据同步，不保证 线程生命期同步；
    // t.join() 保证 线程执行完毕、资源被回收。
    t.join();
    return 0;
}